table of contents
OSTREE PREPARE-ROOT(1) | ostree prepare-root | OSTREE PREPARE-ROOT(1) |
NAME¶
ostree-prepare-root - Change the view of a mounted root filesystem to an ostree deployment
SYNOPSIS¶
ostree prepare-root {TARGET}
DESCRIPTION¶
At its core, ostree operates on an existing mounted filesystem. Tooling such as ostree admin deploy will create a new directory that can be used as a bootable target. This tool is designed to run in an initramfs and set up "remapping" mounts as a view into that filesystem.
As of more recently, this tool also has optional support for composefs, which creates a distinct mount point layered on top of the underlying filesystem.
The most common pattern today is to use systemd in an initramfs. The systemd unit shipped upstream is ordered in this way: After=sysroot.mount and Before=initrd-root-fs.target
When it runs, the mounted filesystem at the provided TARGET (usually /sysroot) will be changed such that what appears at /sysroot is actually the "deployment root" - i.e. a particular versioned subdirectory. What was formerly the "physical root" i.e. the real root of the filesystem will appear as /sysroot/sysroot.
For /var, by default a bind mount is created from the deployment root to /sysroot/var.
A read-only bind mount is created over /sysroot/usr. The immutable bit (see chattr(1)) is set on the deployment root, so this provides basic protection for filesystem mutation. If the sysroot.readonly option is enabled, then /sysroot/sysroot is mounted read-only to provide further protection and a writable bind mount for /sysroot/etc is created.
Finally, when higher level tooling such as systemd performs a switch-root operation, what was /sysroot becomes / and after the transition into the real root, the system will be booted into the "deployment", which is a versioned immutable filesystem tree. The ostree tooling running in the real root thereafter performs further changes by operating on /sysroot which is now the "physical root".
CONFIGURATION¶
The /usr/lib/ostree/prepare-root.conf (or /etc/ostree/prepare-root.conf) config file is parsed by ostree-prepare-root. This file must be present in the initramfs. The default dracut module will copy it from the real root if present.
sysroot.readonly
etc.transient
root.transient
Enabling this option can be very useful for cases such as packages (dpkg/rpm/etc) that write content into /opt, particularly where they expect the target to be writable at runtime. To make that work, ensure that your /opt directory is *not* a symlink to /var/opt, but is just an empty directory.
Note the /usr mount point remains read-only by default. This option is independent of etc.transient and sysroot.readonly; it is supported for example to have root.transient=true but etc.transient=false in which case changes to /etc continue to persist across updates, with the default OSTree 3-way merge applied.
composefs.enabled
composefs.keypath
SYSTEMD¶
As mentioned above, this tool comes with a systemd unit file ostree-prepare-root.service and it is primarily expected to be invoked this way.
COMPOSEFS¶
The default for ostree is to create a plain hardlinked filesystem tree. composefs support is currently experimental; see the upstream doc/composefs.md for more information on using it.
OSTree |